<?php
/*
 * Copyright (c) 2017-2025 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
namespace TencentCloud\Vod\V20180717\Models;
use TencentCloud\Common\AbstractModel;

/**
 * VOD file information
 *
 * @method MediaBasicInfo getBasicInfo() Obtain Basic information, such as video name, category, playback address, and cover image.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setBasicInfo(MediaBasicInfo $BasicInfo) Set Basic information, such as video name, category, playback address, and cover image.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaMetaData getMetaData() Obtain Metadata, such as size, duration, video stream information, and audio stream information.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setMetaData(MediaMetaData $MetaData) Set Metadata, such as size, duration, video stream information, and audio stream information.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaTranscodeInfo getTranscodeInfo() Obtain Result information of transcoding, such as address, specification, bitrate, and resolution of the videos in various bitrates generated by transcoding a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setTranscodeInfo(MediaTranscodeInfo $TranscodeInfo) Set Result information of transcoding, such as address, specification, bitrate, and resolution of the videos in various bitrates generated by transcoding a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaAnimatedGraphicsInfo getAnimatedGraphicsInfo() Obtain Result information of animated image generating, i.e., relevant information of an animated image (such as .gif) generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setAnimatedGraphicsInfo(MediaAnimatedGraphicsInfo $AnimatedGraphicsInfo) Set Result information of animated image generating, i.e., relevant information of an animated image (such as .gif) generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaSampleSnapshotInfo getSampleSnapshotInfo() Obtain Sampled screenshot information, i.e., relevant information of a sampled screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setSampleSnapshotInfo(MediaSampleSnapshotInfo $SampleSnapshotInfo) Set Sampled screenshot information, i.e., relevant information of a sampled screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaImageSpriteInfo getImageSpriteInfo() Obtain Image sprite information, i.e., relevant information of image sprite generated from video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setImageSpriteInfo(MediaImageSpriteInfo $ImageSpriteInfo) Set Image sprite information, i.e., relevant information of image sprite generated from video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaSnapshotByTimeOffsetInfo getSnapshotByTimeOffsetInfo() Obtain Time point screenshot information, i.e., information of each time point screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setSnapshotByTimeOffsetInfo(MediaSnapshotByTimeOffsetInfo $SnapshotByTimeOffsetInfo) Set Time point screenshot information, i.e., information of each time point screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaKeyFrameDescInfo getKeyFrameDescInfo() Obtain Timestamp information, i.e., information of each timestamp set for a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setKeyFrameDescInfo(MediaKeyFrameDescInfo $KeyFrameDescInfo) Set Timestamp information, i.e., information of each timestamp set for a video.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaAdaptiveDynamicStreamingInfo getAdaptiveDynamicStreamingInfo() Obtain Adaptive bitrate streaming information, such as specification, encryption type, and container format.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setAdaptiveDynamicStreamingInfo(MediaAdaptiveDynamicStreamingInfo $AdaptiveDynamicStreamingInfo) Set Adaptive bitrate streaming information, such as specification, encryption type, and container format.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaMiniProgramReviewInfo getMiniProgramReviewInfo() Obtain WeChat Mini Program audit information.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method void setMiniProgramReviewInfo(MediaMiniProgramReviewInfo $MiniProgramReviewInfo) Set WeChat Mini Program audit information.
Note: this field may return null, indicating that no valid values can be obtained.
 * @method MediaSubtitleInfo getSubtitleInfo() Obtain Subtitle information
Note: this field may return `null`, indicating that no valid value is obtained.
 * @method void setSubtitleInfo(MediaSubtitleInfo $SubtitleInfo) Set Subtitle information
Note: this field may return `null`, indicating that no valid value is obtained.
 * @method string getFileId() Obtain Unique ID of media file.
 * @method void setFileId(string $FileId) Set Unique ID of media file.
 * @method FileReviewInfo getReviewInfo() Obtain Moderation details.
Note: This field may return null, indicating that no valid values can be obtained.
 * @method void setReviewInfo(FileReviewInfo $ReviewInfo) Set Moderation details.
Note: This field may return null, indicating that no valid values can be obtained.
 */
class MediaInfo extends AbstractModel
{
    /**
     * @var MediaBasicInfo Basic information, such as video name, category, playback address, and cover image.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $BasicInfo;

    /**
     * @var MediaMetaData Metadata, such as size, duration, video stream information, and audio stream information.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $MetaData;

    /**
     * @var MediaTranscodeInfo Result information of transcoding, such as address, specification, bitrate, and resolution of the videos in various bitrates generated by transcoding a video.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $TranscodeInfo;

    /**
     * @var MediaAnimatedGraphicsInfo Result information of animated image generating, i.e., relevant information of an animated image (such as .gif) generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $AnimatedGraphicsInfo;

    /**
     * @var MediaSampleSnapshotInfo Sampled screenshot information, i.e., relevant information of a sampled screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $SampleSnapshotInfo;

    /**
     * @var MediaImageSpriteInfo Image sprite information, i.e., relevant information of image sprite generated from video.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $ImageSpriteInfo;

    /**
     * @var MediaSnapshotByTimeOffsetInfo Time point screenshot information, i.e., information of each time point screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $SnapshotByTimeOffsetInfo;

    /**
     * @var MediaKeyFrameDescInfo Timestamp information, i.e., information of each timestamp set for a video.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $KeyFrameDescInfo;

    /**
     * @var MediaAdaptiveDynamicStreamingInfo Adaptive bitrate streaming information, such as specification, encryption type, and container format.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $AdaptiveDynamicStreamingInfo;

    /**
     * @var MediaMiniProgramReviewInfo WeChat Mini Program audit information.
Note: this field may return null, indicating that no valid values can be obtained.
     */
    public $MiniProgramReviewInfo;

    /**
     * @var MediaSubtitleInfo Subtitle information
Note: this field may return `null`, indicating that no valid value is obtained.
     */
    public $SubtitleInfo;

    /**
     * @var string Unique ID of media file.
     */
    public $FileId;

    /**
     * @var FileReviewInfo Moderation details.
Note: This field may return null, indicating that no valid values can be obtained.
     */
    public $ReviewInfo;

    /**
     * @param MediaBasicInfo $BasicInfo Basic information, such as video name, category, playback address, and cover image.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaMetaData $MetaData Metadata, such as size, duration, video stream information, and audio stream information.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaTranscodeInfo $TranscodeInfo Result information of transcoding, such as address, specification, bitrate, and resolution of the videos in various bitrates generated by transcoding a video.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaAnimatedGraphicsInfo $AnimatedGraphicsInfo Result information of animated image generating, i.e., relevant information of an animated image (such as .gif) generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaSampleSnapshotInfo $SampleSnapshotInfo Sampled screenshot information, i.e., relevant information of a sampled screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaImageSpriteInfo $ImageSpriteInfo Image sprite information, i.e., relevant information of image sprite generated from video.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaSnapshotByTimeOffsetInfo $SnapshotByTimeOffsetInfo Time point screenshot information, i.e., information of each time point screenshot generated from a video.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaKeyFrameDescInfo $KeyFrameDescInfo Timestamp information, i.e., information of each timestamp set for a video.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaAdaptiveDynamicStreamingInfo $AdaptiveDynamicStreamingInfo Adaptive bitrate streaming information, such as specification, encryption type, and container format.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaMiniProgramReviewInfo $MiniProgramReviewInfo WeChat Mini Program audit information.
Note: this field may return null, indicating that no valid values can be obtained.
     * @param MediaSubtitleInfo $SubtitleInfo Subtitle information
Note: this field may return `null`, indicating that no valid value is obtained.
     * @param string $FileId Unique ID of media file.
     * @param FileReviewInfo $ReviewInfo Moderation details.
Note: This field may return null, indicating that no valid values can be obtained.
     */
    function __construct()
    {

    }

    /**
     * For internal only. DO NOT USE IT.
     */
    public function deserialize($param)
    {
        if ($param === null) {
            return;
        }
        if (array_key_exists("BasicInfo",$param) and $param["BasicInfo"] !== null) {
            $this->BasicInfo = new MediaBasicInfo();
            $this->BasicInfo->deserialize($param["BasicInfo"]);
        }

        if (array_key_exists("MetaData",$param) and $param["MetaData"] !== null) {
            $this->MetaData = new MediaMetaData();
            $this->MetaData->deserialize($param["MetaData"]);
        }

        if (array_key_exists("TranscodeInfo",$param) and $param["TranscodeInfo"] !== null) {
            $this->TranscodeInfo = new MediaTranscodeInfo();
            $this->TranscodeInfo->deserialize($param["TranscodeInfo"]);
        }

        if (array_key_exists("AnimatedGraphicsInfo",$param) and $param["AnimatedGraphicsInfo"] !== null) {
            $this->AnimatedGraphicsInfo = new MediaAnimatedGraphicsInfo();
            $this->AnimatedGraphicsInfo->deserialize($param["AnimatedGraphicsInfo"]);
        }

        if (array_key_exists("SampleSnapshotInfo",$param) and $param["SampleSnapshotInfo"] !== null) {
            $this->SampleSnapshotInfo = new MediaSampleSnapshotInfo();
            $this->SampleSnapshotInfo->deserialize($param["SampleSnapshotInfo"]);
        }

        if (array_key_exists("ImageSpriteInfo",$param) and $param["ImageSpriteInfo"] !== null) {
            $this->ImageSpriteInfo = new MediaImageSpriteInfo();
            $this->ImageSpriteInfo->deserialize($param["ImageSpriteInfo"]);
        }

        if (array_key_exists("SnapshotByTimeOffsetInfo",$param) and $param["SnapshotByTimeOffsetInfo"] !== null) {
            $this->SnapshotByTimeOffsetInfo = new MediaSnapshotByTimeOffsetInfo();
            $this->SnapshotByTimeOffsetInfo->deserialize($param["SnapshotByTimeOffsetInfo"]);
        }

        if (array_key_exists("KeyFrameDescInfo",$param) and $param["KeyFrameDescInfo"] !== null) {
            $this->KeyFrameDescInfo = new MediaKeyFrameDescInfo();
            $this->KeyFrameDescInfo->deserialize($param["KeyFrameDescInfo"]);
        }

        if (array_key_exists("AdaptiveDynamicStreamingInfo",$param) and $param["AdaptiveDynamicStreamingInfo"] !== null) {
            $this->AdaptiveDynamicStreamingInfo = new MediaAdaptiveDynamicStreamingInfo();
            $this->AdaptiveDynamicStreamingInfo->deserialize($param["AdaptiveDynamicStreamingInfo"]);
        }

        if (array_key_exists("MiniProgramReviewInfo",$param) and $param["MiniProgramReviewInfo"] !== null) {
            $this->MiniProgramReviewInfo = new MediaMiniProgramReviewInfo();
            $this->MiniProgramReviewInfo->deserialize($param["MiniProgramReviewInfo"]);
        }

        if (array_key_exists("SubtitleInfo",$param) and $param["SubtitleInfo"] !== null) {
            $this->SubtitleInfo = new MediaSubtitleInfo();
            $this->SubtitleInfo->deserialize($param["SubtitleInfo"]);
        }

        if (array_key_exists("FileId",$param) and $param["FileId"] !== null) {
            $this->FileId = $param["FileId"];
        }

        if (array_key_exists("ReviewInfo",$param) and $param["ReviewInfo"] !== null) {
            $this->ReviewInfo = new FileReviewInfo();
            $this->ReviewInfo->deserialize($param["ReviewInfo"]);
        }
    }
}
